﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using ApplicationGenerator.CommonModule;
using ApplicationGenerator.Versions.BusinessLogic;
using ApplicationGenerator.Versions.Forms;

namespace ApplicationGenerator.Lists.Web
{
    /// <summary>
    /// Akcja pozwalająca na przejście na formularz powiązany z wybranym elementem
    /// </summary>
    [DefaultProperty("Form")]
    [Serializable]
    public class ListActionElementDetails : ListActionBase
    {
        #region Properties
        /// <summary>
        /// Docelowy formularz, na który należy przejść w wyniku wykonania akcji
        /// </summary>
        [Category("Rozszerzone dane")]
        [DisplayName("Docelowy formularz")]
        [Description("Docelowy formularz, na który w wyniku wykonania akcji zostanie przeniesiony użytkownik")]
        [TypeConverter(typeof(VersionConverter))]
        [Editor(typeof(VersionEditor), typeof(UITypeEditor))]
        [VersionType(VersionElement.Form)]
        public VersionInfo Form
        {
            get;
            set;
        }
        #endregion

        #region Overrides
        /// <summary>
        /// Wykonuje akcję
        /// </summary>
        public override void ExecuteAction()
        {
            IList<int> selectedIds = ListControl.GetSelectedIds();
            if (selectedIds.Count != 1)
            {
                base.ListControl.AddErrorMessage("Należy zaznaczyć tylko jeden element.");
                return;
            }

            ListControl.Page.Response.Redirect(QuerryStringConstants.GenerateLoadElementFormUrl(Form.Version.ToString(), selectedIds[0]));
        }

        /// <summary>
        /// Zwraca nazwę akcji
        /// </summary>
        /// <returns>Nazwa akcji</returns>
        public override string ToString()
        {
            return "Akcja szczegóły";
        }

        /// <summary>
        /// Waliduje encję
        /// </summary>
        /// <param name="errorList">Lista błędów</param>
        /// <returns>Czy encja jest poprawna ?</returns>
        public override bool IsValid(ErrorEntity errorList)
        {
            bool isValidated = base.IsValid(errorList);
            if (this.Form == null)
            {
                errorList.ErrorStrings.Add("Należy wybrać formularz do wyświetlenia");
                isValidated = false;
            }

            return isValidated;
        }

        #endregion
    }
}
